package fr.esisar.cs420.graphproj;

/**
 * Permet la récupération et l'affichage "facile" de tous les albums, toutes les photos, ou tout type de document
 */
public class Document {
	// Type de Document (Propre à la classe)
	public static enum recherche{ Album, Livre, Tout };
	public static enum type { Photo, Album, Livre , Format };
	
	// Attributs
	int id;
	type t;
	recherche r;
	StringBuilder title = new StringBuilder();
	Document prec = null, next = null;
	
	// Constructeur(s)
	/**
	 * Permet l'affichage d'un document inexistant sur l'IHM
	 */
	Document(){
		id = 0;
		title.replace(0, title.length(), "Ceci n'est ni un album, ni un livre");
	}
	/**
	 * Permet la création du premier document de la chaine
	 * @param r donne le type de recherche effectué
	 * @param t donne le type de document de toute la chaine si la recherche est ciblée
	 * @param id donne l'idée de ce document (chaque document de la chaine a un idée différent)
	 * @param title donne le titre du livre ou de l'album
	 */
	Document(recherche r,type t, int id, String title){
		this.r = r;
		this.t = t;
		this.id = id;
		this.title.replace(0, this.title.length(), title);
	}
	
	/**
	 * Permet la création des prochains documents de la  chaine
	 * @param t donne le type de document de toute la chaine si la recherche est ciblée
	 * @param id donne l'idée de ce document (chaque document de la chaine a un idée différent)
	 * @param title donne le titre du livre ou de l'album
	 * @param prec donne l'élément précédent celui-ci
	 */
	Document(type t, int id, String title, Document prec){
		this(prec.r,t,id,title);
		this.prec = prec;
		prec.next = this;
	}
	
	/**
	 * Permet la création des éléments suivants de la chaine si elle est homogène (albums, ou livres)
	 * @param title donne le titre du livre ou de l'album
	 * @Param prec donne l'élément précédent de celui-ci
	 */
	Document(String title, Document prec){
		this(prec.t,prec.id+1,title,prec);
	}
	
	/**
	 * Renvoie le titre du Document
	 * @return Titre Document
	 */
	public String getTitle(){ return title.toString(); }
	
	/**
	 * 
	 * @return
	 */
	public Document getNext(){ return next; }
	public Document getPrec(){ return prec; }
	public String getSearch(){
		switch(r){
		case Livre:
			return "livre";
		case Album:
			return "album";
		default:
			return "all";
		}
	}
	public type getType() {
		return t;
	}
	
	public int getId(){
		return id;
	}
	
	public String getLegend(){
		return "Identifiant n°"+id+" "+title;
	}
	public static Document getFirst(Document doc){
		if(doc!=null){
			while(doc.prec!=null) doc = doc.prec;
		}
		return doc;
	}
	
	public static Document goTo(int id, Document doc){
		doc = Document.getFirst(doc);
		if(doc!=null){
			while(doc.getId()!=id&&doc.getNext()!=null) doc = doc.getNext();
		}
		return doc;
	}
}
